package net.xdclass.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.xdclass.enums.BizCodeEnum;

/**
 * @Classname JsonData
 * @Description TODO
 * @Date 2022/4/4 18:44
 * @Created by sunhao
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonData {


  /**
   * 状态码 0 表示成功，1表示处理中，-1表示失败
   */

  private Integer code;
  /**
   * 数据
   */
  private Object data;
  /**
   * 描述
   */
  private String msg;


  public <T> T getData(TypeReference<T> typeReference){
    return JSON.parseObject(JSON.toJSONString(data),typeReference);
  }

  /**
   * 成功，传入数据
   * @return
   */
  public static JsonData buildSuccess() {
    return new JsonData(0, null, null);
  }


  /**
   * 成功，传入数据 提示信息
   * @return
   */
  public static JsonData buildSuccessMessage(String message) {
    return new JsonData(0, null, message);
  }


  /**
   *  成功，传入数据
   * @param data
   * @return
   */
  public static JsonData buildSuccess(Object data) {
    return new JsonData(0, data, null);
  }

  /**
   * 失败，传入描述信息
   * @param msg
   * @return
   */
  public static JsonData buildError(String msg) {
    return new JsonData(-1, null, msg);
  }


  /**
   * 自定义状态码和错误信息
   * @param code
   * @param msg
   * @return
   */
  public static JsonData buildCodeAndMsg(int code, String msg) {
    return new JsonData(code, null, msg);
  }

  /**
   * 传入枚举，返回信息
   * @param codeEnum
   * @return
   */
  public static JsonData buildResult(BizCodeEnum codeEnum){
    return JsonData.buildCodeAndMsg(codeEnum.getCode(),codeEnum.getMessage());
  }

}
